//package com.kjc.demo.minio.example;
//
///*
// * MinIO Java SDK for Amazon S3 Compatible Cloud Storage, (C) 2017 MinIO, Inc.
// *
// * Licensed under the Apache License, Version 2.0 (the "License");
// * you may not use this file except in compliance with the License.
// * You may obtain a copy of the License at
// *
// *     https://www.apache.org/licenses/LICENSE-2.0
// *
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS,
// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// * See the License for the specific language governing permissions and
// * limitations under the License.
// */
//
//import java.io.IOException;
//import java.io.InputStream;
//
//import me.tongfei.progressbar.ProgressBar;
//import me.tongfei.progressbar.ProgressBarStyle;
//
//public class ProgressStream extends InputStream {
//  private InputStream in;
//  private ProgressBar pb;
//
//  /**
//   * ProgressStream implements an extends InputStream while also writing out the read progress on
//   * console. ProgressStream can be used as a direct replacement for any InputStream compatible
//   * input.
//   *
//   * @param msg Custom message string.
//   * @param style Custom progress bar style.
//   * @param stream InputStream to be wrapped.
//   * @throws IOException For any exception generated by the InputStream.
//   */
//  public ProgressStream(String msg, ProgressBarStyle style, InputStream stream) throws IOException {
//    this(msg, style, (long) stream.available(), stream);
//  }
//
//  /**
//   * ProgressStream implements an extends InputStream while also writing out the read progress on
//   * console. ProgressStream can be used as a direct replacement for any InputStream compatible
//   * input.
//   *
//   * @param msg Custom message string.
//   * @param style Custom progress bar style.
//   * @param size Size of the progress bar.
//   * @param stream InputStream to be wrapped.
//   * @throws IOException For any exception generated by the InputStream.
//   */
//  public ProgressStream(String msg, ProgressBarStyle style, long size, InputStream stream)
//      throws IOException {
//    super();
//
//    // Allocate the reader.
//    this.in = stream;
//
//    // Initialize progress bar.
//    this.pb = new ProgressBar(msg, size, style);
//    this.pb.start();
//  }
//
//  @Override
//  public int available() throws IOException {
//    return this.in.available();
//  }
//
//  @Override
//  public void close() throws IOException {
//    this.pb.stop();
//    this.in.close();
//    return;
//  }
//
//  @Override
//  public int read() throws IOException {
//    this.pb.step();
//    return this.in.read();
//  }
//
//  @Override
//  public int read(byte[] toStore) throws IOException {
//    int readBytes = this.in.read(toStore);
//    this.pb.stepBy(readBytes); // Update progress bar.
//    return readBytes;
//  }
//
//  @Override
//  public int read(byte[] toStore, int off, int len) throws IOException {
//    int readBytes = this.in.read(toStore, off, len);
//    this.pb.stepBy(readBytes);
//    return readBytes;
//  }
//
//  @Override
//  public long skip(long n) throws IOException {
//    this.pb.stepTo(n);
//    return this.in.skip(n);
//  }
//
//  @Override
//  public boolean markSupported() {
//    return false;
//  }
//}
